<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>JS Drum Kit</title>
    <link rel="stylesheet" href="style.css" />
    <link rel="icon" href="https://fav.farm/🔥" />
  </head>
  <body>
    <!-- HTML 键盘输入元素 (<kbd>) 用于表示用户输入，它将产生一个行内元素，以浏览器的默认 monospace 字体显示。 -->
    <div class="keys">
      <div data-key="65" class="key">
        <kbd>A</kbd>
        <kbd></kbd>
        <span class="sound">clap</span>
      </div>
      <div data-key="83" class="key">
        <kbd>S</kbd>
        <span class="sound">hihat</span>
      </div>
      <div data-key="68" class="key">
        <kbd>D</kbd>
        <span class="sound">kick</span>
      </div>
      <div data-key="70" class="key">
        <kbd>F</kbd>
        <span class="sound">openhat</span>
      </div>
      <div data-key="71" class="key">
        <kbd>G</kbd>
        <span class="sound">boom</span>
      </div>
      <div data-key="72" class="key">
        <kbd>H</kbd>
        <span class="sound">ride</span>
      </div>
      <div data-key="74" class="key">
        <kbd>J</kbd>
        <span class="sound">snare</span>
      </div>
      <div data-key="75" class="key">
        <kbd>K</kbd>
        <span class="sound">tom</span>
      </div>
      <div data-key="76" class="key">
        <kbd>L</kbd>
        <span class="sound">tink</span>
      </div>
    </div>

    <audio data-key="65" src="sounds/clap.wav"></audio>
    <audio data-key="83" src="sounds/hihat.wav"></audio>
    <audio data-key="68" src="sounds/kick.wav"></audio>
    <audio data-key="70" src="sounds/openhat.wav"></audio>
    <audio data-key="71" src="sounds/boom.wav"></audio>
    <audio data-key="72" src="sounds/ride.wav"></audio>
    <audio data-key="74" src="sounds/snare.wav"></audio>
    <audio data-key="75" src="sounds/tom.wav"></audio>
    <audio data-key="76" src="sounds/tink.wav"></audio>

    <script>
      function playSound(e) {
        const audio = document.querySelector(`audio[data-key='${e.keyCode}']`)
        const key = document.querySelector(`.key[data-key='${e.keyCode}']`)
        if (!audio) {
          return
        }
        audio.currentTime = 0
        audio.play()
        key.classList.add('playing')
      }
      function removeTransform(e) {
        if (e.propertyName !== 'transform') {
          return
        }
        this.classList.remove('playing')
      }
      const keys = document.querySelectorAll('.key')
      keys.forEach((key) =>
        // transitionend事件会在CSS过渡完成的时候触发
        key.addEventListener('transitionend', removeTransform)
      )
      window.addEventListener('keydown', playSound)
    </script>
  </body>
</html>
